import {useCallback} from 'react';
import {Form} from "antd";
import {FormInstance} from "antd/lib/form";

interface UseFormResult {
  /** 表单实例 */
  form: FormInstance,
  /** 表单绑定函数 */
  bind: (data?: any) => void;
  /** 表单重置函数 */
  reset: () => void;
  /** 表单提交函数 */
  submit: () => void;
}

/** 表单操作组件 */
function useForm(): UseFormResult {
  const [form] = Form.useForm();

  /** 表单提交函数 */
  const submit = useCallback(() => {
    form.submit();
  }, [form]);

  /** 表单重置函数 */
  const reset = useCallback(() => {
    form.resetFields();
  }, [form]);

  /** 表单绑定函数 */
  const bind = useCallback((d?: any) => {
    d && form.setFieldsValue(d);
  }, [form]);

  return {
    form,
    bind,
    reset,
    submit,
  };
}

export default useForm;

